魔兽世界可以卡墙跳``跳我会跳,讲技巧的人闪!我要的是原理,系统原理,或者说是模块的问题,要详细

来源:百度知道 编辑:UC知道 时间:2024/06/01 04:35:45

首先是角色碰撞体积,我们控制的玩家都有一定的碰撞体积,可以认为:我们操作的都是一个个的圆柱体。而不同种族不同性别的圆柱体大小略有不同,所以有些地方,亡灵女能跳,牛头男就跳不了。

然后是墙的模型,有不少跳墙,是利用一些墙的模型不是很规范,可以找到踩的地方。比如BWL里,耐法的那个大石头,就是利用一个看上去不存在,但确实又存在的石头跳上去的。

最后是延时,现在很多直上直下的墙都能跳(比如ZAM里开门之前就能跳到门旁边的墙上面去。这就是利用延时的关系,现在大多数的跳墙BUG都是利用的这一点。

模型碰撞是在本机运算得到的,而你角色的位置是要传到服务器然后反馈回本机的。这之间就有一个时间差。
本来程序会让你的角色落下的,但如果你在起跳后某个特定时刻按向前,服务器认为你还是在地上而不是空中,所以就试图把你位置向前移动(本来跳起来之后是不能自由移动的),然后反馈一个坐标给本机。
这个坐标已经是在墙体里面了,这时,本机会得到两个结论:1、这个坐标在墙内,无法达到,应当排开(被弹回来)。2、这个坐标脚下有实体(墙),可以站在这个实体上。
正常情况下,结论1会把结论2排斥掉,所以角色会掉下来。但是,也有时候,结论1得出后,还未执行,本机又得到了结论2,然后同时执行这两个结论,所以我们就既被弹开,又站在了墙上。而且如果不再进行移动,程序是不会再次判定你是否脚踏实地的(很简单的例子,站在一堆矿上挖掉矿,人就会腾空,不移动是不会掉下去的) 而要让这两个结论同时执行的条件,就是在起跳后某一时刻向前(这一时刻与延时有关,实践证明,延时比较高的时候会好跳一些)

大概原理就是这样
再具体就不清楚了,没人见过程序是如何写的

每次补丁中,BLZ都会稍稍改动角色或墙的模型,所以以前不能跳的地方,现在或许可以跳了,以前能跳的,或许现在就不可以了。兽人的肩变小就是角色模型的改动,而海山现在跳不上了,是因为地形的改动。

以上

魔兽世界的地形都是先进行三维空间的框架建模,然后在外面贴上材质的。那么大的地形,模型不可能是一个整体,别说技术上的难度,模型生成这个过程是在客户端进行的。如果地形模型用一个整体,用户机器垃圾点就会卡